package cn.fldong.dao;

import cn.fldong.model.ClassInfo;
import java.sql.SQLException;
import java.util.List;

/**
 * ClassInfo数据访问接口，定义班级相关的数据库操作
 */
public interface ClassDAO {
    /**
     * 根据班级ID查询班级
     * @param classId 班级ID
     * @return 班级对象
     * @throws SQLException 数据库操作异常
     */
    ClassInfo getClassById(String classId) throws SQLException;
    
    /**
     * 查询所有班级
     * @return 班级列表
     * @throws SQLException 数据库操作异常
     */
    List<ClassInfo> getAllClasses() throws SQLException;
    
    /**
     * 根据年级查询班级
     * @param grade 年级
     * @return 班级列表
     * @throws SQLException 数据库操作异常
     */
    List<ClassInfo> getClassesByGrade(String grade) throws SQLException;
    
    /**
     * 根据专业查询班级
     * @param major 专业
     * @return 班级列表
     * @throws SQLException 数据库操作异常
     */
    List<ClassInfo> getClassesByMajor(String major) throws SQLException;
    
    /**
     * 添加新班级
     * @param classInfo 班级对象
     * @return 受影响的行数
     * @throws SQLException 数据库操作异常
     */
    boolean addClass(ClassInfo classInfo) throws SQLException;
    
    /**
     * 更新班级信息
     * @param classInfo 班级对象
     * @return 受影响的行数
     * @throws SQLException 数据库操作异常
     */
    boolean updateClass(ClassInfo classInfo) throws SQLException;
    
    /**
     * 根据班级ID删除班级
     * @param classId 班级ID
     * @return 受影响的行数
     * @throws SQLException 数据库操作异常
     */
    boolean deleteClass(String classId) throws SQLException;

    /**
     * 验证班级名称是否存在
     * @param className 班级名称
     * @return 存在返回true，否则返回false
     * @throws SQLException 数据库异常
     */
    boolean classNameExists(String className) throws SQLException;
    
    /**
     * 检查班级是否有学生
     * @param classId 班级ID
     * @return 有学生返回true，否则返回false
     * @throws SQLException 数据库异常
     */
    boolean hasStudents(String classId) throws SQLException;
    
    /**
     * 根据班级名称搜索班级
     * @param keyword 搜索关键词
     * @return 班级列表
     * @throws SQLException 数据库异常
     */
    List<ClassInfo> searchClassesByClassName(String keyword) throws SQLException;
    
    /**
     * 根据班级ID搜索班级
     * @param keyword 搜索关键词
     * @return 班级列表
     * @throws SQLException 数据库异常
     */
    List<ClassInfo> searchClassesByClassId(String keyword) throws SQLException;
    
    /**
     * 根据专业搜索班级
     * @param keyword 搜索关键词
     * @return 班级列表
     * @throws SQLException 数据库异常
     */
    List<ClassInfo> searchClassesByMajor(String keyword) throws SQLException;
    
    /**
     * 根据年级搜索班级
     * @param keyword 搜索关键词
     * @return 班级列表
     * @throws SQLException 数据库异常
     */
    List<ClassInfo> searchClassesByGrade(String keyword) throws SQLException;
}